Communicating with devices that are protected by firewalls or with devices that are protected by Network Address Translation (NAT) is becoming a common scenario for large, geographically-distributed, enterprise software applications.
Current solutions for this common problem include virtual private networks (VPNs) and Secure Shell (SSH) reverse tunneling. Each solution, however, requires some amount of manual configuration, thus limiting network flexibility and scalability.